package pe.com.cotelasa.scp.dao.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.com.cotelasa.common.dao.DaoImpl;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOTipoCambio;
import pe.com.cotelasa.scp.entidad.TipoCambio;

/**
 * @author usuario
 */
@Repository("daoTipoCambio")
public class DAOTipoCambioImpl extends DaoImpl<TipoCambio, Integer> implements IDAOTipoCambio, Serializable {

    @Autowired
    protected SessionFactory sessionFactory;

    public Collection<TipoCambio> listarTipoCambiosPorFiltro(Date fechaInicio, Date fechaFinal) throws DAOException {
        try {
            Collection<TipoCambio> lista = null;

            if (fechaInicio != null && fechaFinal != null) {
                lista = sessionFactory.getCurrentSession().createCriteria(TipoCambio.class).add(Restrictions.ge("fecCreacion", fechaInicio)).add(Restrictions.le("fecCreacion", fechaFinal)).addOrder(Order.desc("id")).list();
            } else if (fechaInicio == null) {
                lista = sessionFactory.getCurrentSession().createCriteria(TipoCambio.class).add(Restrictions.le("fecCreacion", fechaFinal)).addOrder(Order.desc("id")).list();
            } else if (fechaFinal == null) {
                lista = sessionFactory.getCurrentSession().createCriteria(TipoCambio.class).add(Restrictions.ge("fecCreacion", fechaInicio)).addOrder(Order.desc("id")).list();
            }

            return lista;
        } catch (Exception e) {
            throw new DAOException(e.getMessage(), e);
        }
    }

    public TipoCambio ValidarTipoCambio(TipoCambio tipoCambio) throws DAOException {
        try {
            TipoCambio tipo = (TipoCambio) sessionFactory.getCurrentSession().createCriteria(TipoCambio.class).add(Restrictions.eq("fecCreacion", tipoCambio.getFecCreacion())).uniqueResult();

            return tipo;
        } catch (Exception e) {
            throw new DAOException(e.getMessage(), e);
        }
    }
}
